﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Collections;
using DTO;
namespace DAO
{
    public class CHOADONDAO:AbstractDao
    {
        //Lây thông tin 1 hóa đơn bất kỳ để xử lý
        //public static CHOADONDTO LayThongTinHoaDon(int MaHoaDon)
        //{
        //    CHOADONDTO hoadonDto = new CHOADONDTO();
        //    OleDbConnection cn = new OleDbConnection();
        //    cn = CHOADONDAO.ConnectionData();
        //    String strSQL = "Select * From HOADON where MaHoaDon="+MaHoaDon.ToString();
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    OleDbDataReader myReader = cmd.ExecuteReader();
        //    while (myReader.Read())
        //    {
        //        hoadonDto.MaHoaDon = int.Parse(myReader[0].ToString());
        //        hoadonDto.TenKhachThanhToan = myReader[1].ToString();
        //        hoadonDto.DiaChi = myReader[2].ToString();
        //        hoadonDto.TriGia = int.Parse(myReader[3].ToString());
        //        hoadonDto.NgayKetThuc = DateTime.Parse(myReader[4].ToString());
        //        hoadonDto.TinhTrang = bool.Parse(myReader[5].ToString());
        //        hoadonDto.MaTiepTan = int.Parse(myReader[6].ToString());
        //    }
        //    myReader.Close();
        //    cn.Close();
        //    return hoadonDto;
        //}
       ////Hàm lấy danh sách tất cả các hóa đơn để xử lý
       // public static List<CHOADONDTO> LayDanhSachHoaDon()
       // {
       //     List<CHOADONDTO> ds = new List<CHOADONDTO>();
       //     OleDbConnection cn = new OleDbConnection();
       //     cn = CHOADONDAO.ConnectionData();
       //     String strSQL = "Select * From HOADON";
       //     OleDbCommand cmd = new OleDbCommand(strSQL, cn);
       //     OleDbDataReader myReader = cmd.ExecuteReader();
       //     while (myReader.Read())
       //     {                 
       //         CHOADONDTO hoadonDto = new CHOADONDTO();
       //         hoadonDto.MaHoaDon = int.Parse(myReader[0].ToString());
       //         hoadonDto.TenKhachThanhToan = myReader[1].ToString();
       //         hoadonDto.DiaChi = myReader[2].ToString();
       //         hoadonDto.TriGia = int.Parse(myReader[3].ToString());
       //         hoadonDto.NgayKetThuc = DateTime.Parse(myReader[4].ToString());
       //         hoadonDto.TinhTrang = bool.Parse(myReader[5].ToString());
       //         hoadonDto.MaTiepTan = int.Parse(myReader[6].ToString());
       //         ds.Add(hoadonDto);
       //     }
       //     myReader.Close();
       //     cn.Close();
       //     return ds;
       // }
       // // Hàm lấy danh sách tất cả các hóa đơn đã đánh dấu xóa dùng để xử lý
       // public static List<CHOADONDTO> LayDanhSachHoaDonDaDanhDauXoa()
       // {
       //     List<CHOADONDTO> ds = new List<CHOADONDTO>();
       //     OleDbConnection cn = new OleDbConnection();
       //     cn = CHOADONDAO.ConnectionData();
       //     String strSQL = "Select * From HOADON where TinhTrang=true";
       //     OleDbCommand cmd = new OleDbCommand(strSQL, cn);
       //     OleDbDataReader myReader = cmd.ExecuteReader();
       //     while (myReader.Read())
       //     {
       //         CHOADONDTO hoadonDto = new CHOADONDTO();
       //         hoadonDto.MaHoaDon = int.Parse(myReader[0].ToString());
       //         hoadonDto.TenKhachThanhToan = myReader[1].ToString();
       //         hoadonDto.DiaChi = myReader[2].ToString();
       //         hoadonDto.TriGia = int.Parse(myReader[3].ToString());
       //         hoadonDto.NgayKetThuc = DateTime.Parse(myReader[4].ToString());
       //         hoadonDto.TinhTrang = bool.Parse(myReader[5].ToString());
       //         hoadonDto.MaTiepTan = int.Parse(myReader[6].ToString());
       //         ds.Add(hoadonDto);
       //     }
       //     myReader.Close();
       //     cn.Close();
       //     return ds;
       // }
        // Hàm lấy danh sách tất cả các hóa đơn chưa đánh dấu xóa dùng để xử lý
        //public static List<CHOADONDTO> LayDanhSachHoaDonChuaDanhDauXoa()
        //{
        //    List<CHOADONDTO> ds = new List<CHOADONDTO>();
        //    OleDbConnection cn = new OleDbConnection();
        //    cn = CHOADONDAO.ConnectionData();
        //    String strSQL = "Select * From HOADON where TinhTrang=false";
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    OleDbDataReader myReader = cmd.ExecuteReader();
        //    while (myReader.Read())
        //    {
        //        CHOADONDTO hoadonDto = new CHOADONDTO();
        //        hoadonDto.MaHoaDon = int.Parse(myReader[0].ToString());
        //        hoadonDto.TenKhachThanhToan = myReader[1].ToString();
        //        hoadonDto.DiaChi = myReader[2].ToString();
        //        hoadonDto.TriGia = int.Parse(myReader[3].ToString());
        //        hoadonDto.NgayKetThuc = DateTime.Parse(myReader[4].ToString());
        //        hoadonDto.TinhTrang = bool.Parse(myReader[5].ToString());
        //        hoadonDto.MaTiepTan = int.Parse(myReader[6].ToString());
        //        ds.Add(hoadonDto);
        //    }
        //    myReader.Close();
        //    cn.Close();
        //    return ds;
        //}
        //// Hàm lấy danh sách hóa đơn do cùng 1 tiếp tân lập để dùng cho việc xử lý
        //public static List<CHOADONDTO> LayDanhSachHoaDonThuocTiepTan(int MaTiepTan)
        //{
        //    List<CHOADONDTO> ds = new List<CHOADONDTO>();
        //    OleDbConnection cn = new OleDbConnection();
        //    cn = CHOADONDAO.ConnectionData();
        //    String strSQL = "Select * From HOADON where MaTiepTan="+MaTiepTan.ToString();
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    OleDbDataReader myReader = cmd.ExecuteReader();
        //    while (myReader.Read())
        //    {
        //        CHOADONDTO hoadonDto = new CHOADONDTO();
        //        hoadonDto.MaHoaDon = int.Parse(myReader[0].ToString());
        //        hoadonDto.TenKhachThanhToan = myReader[1].ToString();
        //        hoadonDto.DiaChi = myReader[2].ToString();
        //        hoadonDto.TriGia = int.Parse(myReader[3].ToString());
        //        hoadonDto.NgayKetThuc = DateTime.Parse(myReader[4].ToString());
        //        hoadonDto.TinhTrang = bool.Parse(myReader[5].ToString());
        //        hoadonDto.MaTiepTan = int.Parse(myReader[6].ToString());
        //        ds.Add(hoadonDto);
        //    }
        //    myReader.Close();
        //    cn.Close();
        //    return ds;
        //}
        ////Hàm lấy toàn bộ thông tin của tất cả hóa đơn trong csdl đổ vào 1 bảng chỉ hiện ra trên giao diện nhưng không dùg xử lý được*/
        //public static DataTable LayBang()
        //{
        //    DataTable dt = new DataTable();
        //    OleDbConnection cn;
        //    //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    cn = CNGUOIDUNGDAO.ConnectionData();
        //    //B3: Tao chuoi strSQL thao tac CSDL
        //    String strSQL;
        //    strSQL = "Select * From HOADON";
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
        //    da.Fill(dt);
        //    //B5: Dong ket noi CSDL
        //    cn.Close();
        //    return dt;
        //}
        ////Hàm kết hai bảng hóa đơn và người dùng, lấy ra 1 số thông tin của tất cả các hóa đơn
        ////đổ vào vào 1 bảng chỉ hiện ra trên giao diện, không dùng để xử lý
        // public static DataTable LayBangHoaDon()
        //{
        //    DataTable dt = new DataTable();
        //    OleDbConnection cn;
        //    //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    cn = CNGUOIDUNGDAO.ConnectionData();
        //    //B3: Tao chuoi strSQL thao tac CSDL
        //    String strSQL;
        //    strSQL = "Select HOADON.TenKhachThanhToan,HOADON.DiaChi,HOADON.TriGia,HOADON.SoNgayThue,HOADON.TinhTrang,NGUOIDUNG.TenNguoiDung From HOADON,NGUOIDUNG where HOADON.MaTiepTan=NGUOIDUNG.MaNguoiDung";
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
        //    da.Fill(dt);
        //    //B5: Dong ket noi CSDL
        //    cn.Close();
        //    return dt;
        //}

        ////Hàm kết hai bảng hóa đơn và người dùng .Lấy ra một số thôngt tin các hóa đơn đã đánh dấu xóa 
        //public static DataTable LayBangHoaDonDaDanhDauXoa()
        //{
        //    DataTable dt = new DataTable();
        //    OleDbConnection cn;
        //    //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    cn = CNGUOIDUNGDAO.ConnectionData();
        //    //B3: Tao chuoi strSQL thao tac CSDL
        //    String strSQL;
        //    strSQL = "Select HOADON.TenKhachThanhToan,HOADON.DiaChi,HOADON.TriGia,HOADON.SoNgayThue,HOADON.TinhTrang,NGUOIDUNG.TenNguoiDung From HOADON,NGUOIDUNG where HOADON.MaTiepTan=NGUOIDUNG.MaNguoiDung and HOADON.TinhTrang=true";
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
        //    da.Fill(dt);
        //    //B5: Dong ket noi CSDL
        //    cn.Close();
        //    return dt;
        //}
        ////Hàm kết hai bảng hóa đơn và người dùng .Lấy ra một số thôngt tin các hóa đơn chưa đánh dấu xóa 
        //public static DataTable LayBangHoaDonChuaDanhDauXoa()
        //{
        //    DataTable dt = new DataTable();
        //    OleDbConnection cn;
        //    //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    cn = CNGUOIDUNGDAO.ConnectionData();
        //    //B3: Tao chuoi strSQL thao tac CSDL
        //    String strSQL;
        //    strSQL = "Select HOADON.TenKhachThanhToan,HOADON.DiaChi,HOADON.TriGia,HOADON.SoNgayThue,HOADON.TinhTrang,NGUOIDUNG.TenNguoiDung From HOADON,NGUOIDUNG where HOADON.MaTiepTan=NGUOIDUNG.MaNguoiDung and HOADON.TinhTrang=false";
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
        //    da.Fill(dt);
        //    //B5: Dong ket noi CSDL
        //    cn.Close();
        //    return dt;
        //}
        ////Hàm lấy 1 số thông tin của tất cả hóa đơn do 1 tiếp tân lập trong csdl đổ vào 1 bảng chỉ hiện ra trên giao diện nhưng không dùg xử lý được*/
        //public static DataTable LayBangHoaDonThuocTiepTan(int MaTiepTan)
        //{
        //    DataTable dt = new DataTable();
        //    OleDbConnection cn;
        //    //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    cn = CNGUOIDUNGDAO.ConnectionData();
        //    //B3: Tao chuoi strSQL thao tac CSDL
        //    String strSQL;
        //    strSQL = strSQL = "Select HOADON.TenKhachThanhToan,HOADON.DiaChi,HOADON.TriGia,HOADON.SoNgayThue,HOADON.TinhTrang,NGUOIDUNG.TenNguoiDung From HOADON,NGUOIDUNG where HOADON.MaTiepTan=NGUOIDUNG.MaNguoiDung and HoaDon.MaTiepTan=" +MaTiepTan.ToString();
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
        //    da.Fill(dt);
        //    //B5: Dong ket noi CSDL
        //    cn.Close();
        //    return dt;
        //}
        //Thêm một hóa đơn
        public void ThemHoaDon(CHOADONDTO hoadonDto)
        {
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CHOADONDAO.ConnectionData();    
            String strSQL = "Insert into HOADON(TenKhachThanhToan,DiaChi,TriGia,NgayKetThuc,TinhTrang,MaTiepTan) values (?,?,?,?,?,?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@TenKhachThanhToan", OleDbType.WChar);
            cmd.Parameters.Add("@DiaChi", OleDbType.WChar);
            cmd.Parameters.Add("@TriGia", OleDbType.Integer);
            cmd.Parameters.Add("@NgayKeThuc", OleDbType.Char);
            //cmd.Parameters.Add("@TinhTrang", OleDbType.Integer);
            cmd.Parameters.Add("@TinhTrang", OleDbType.Boolean);
            cmd.Parameters.Add("@MaTiepTan", OleDbType.Integer);
            cmd.Parameters[0].Value = hoadonDto.TenKhachThanhToan;
            cmd.Parameters[1].Value = hoadonDto.DiaChi;
            cmd.Parameters[2].Value = hoadonDto.TriGia;
            cmd.Parameters[3].Value = hoadonDto.NgayKetThuc.ToString("MM/dd/yyyy hh:mm:ss tt"); ;
           // int gt = (hoadonDto.TinhTrang == true) ? 1 : 0;
            //cmd.Parameters[4].Value =gt;
            cmd.Parameters[4].Value = hoadonDto.TinhTrang;
            cmd.Parameters[5].Value = hoadonDto.MaTiepTan;         
            cmd.ExecuteNonQuery();
            //strSQL = "Select @@IDENTITY";
            //cmd = new OleDbCommand(strSQL, cn);
            //hoadonDto.MaHoaDon = (int)cmd.ExecuteScalar();
            cn.Close();
        }
        //Hàm đánh dấu xóa hóa đơn tạm thời hoặc phục hồi lại
        //public static void CapNhatTinhTrangHoaDon(int MaHoaDon, bool TinhTrang)
        //{
        //    OleDbConnection cn;
        //    cn = CHOADONDAO.ConnectionData();
        //    string strSQL = "UPDATE HOADON SET TinhTrang=? WHERE (MaHoaDon=?)";
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    cmd.Parameters.Add("@TinhTrang", OleDbType.Boolean);
        //    cmd.Parameters.Add("@MaHoaDon", OleDbType.Integer);
        //    cmd.Parameters[0].Value = TinhTrang;
        //    cmd.Parameters[1].Value = MaHoaDon;
        //    cmd.ExecuteNonQuery();
        //    cn.Close();
        //}
        ////Hàm xóa vĩnh viễn hóa đơn
        //public static void XoaHoaDon(int MaHoaDon)
        //{
        //    //Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    OleDbConnection cn;
        //    cn = CHOADONDAO.ConnectionData();
        //    // chuoi strSQL thao tac CSDL
        //    String strSQL = "DELETE FROM HOADON WHERE MaHoaDon=?";
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    //add vao cmd để tránh bị sai sót khi gán thuộc tính bằng 1 giá trị cụ thể
        //    cmd.Parameters.Add("@MaHoaDon", OleDbType.Integer);
        //    cmd.Parameters[0].Value = MaHoaDon;
        //    cmd.ExecuteNonQuery();
        //    //đóng kết nối
        //    cn.Close();
        //}
        public static CHOADONDTO LayThongTinHoaDonTheoNgayKetThuc(string tenKhachThanhToan,DateTime ngayKetThuc)
        {
            CHOADONDTO hoadonDto = new CHOADONDTO();
            OleDbConnection cn = new OleDbConnection();
            cn = CHOADONDAO.ConnectionData();
            String strSQL = "SELECT MaHoaDon, TenKhachThanhToan, DiaChi, TriGia, NgayKetThuc, TinhTrang, MaTiepTan FROM HOADON WHERE  (TenKhachThanhToan ='" + tenKhachThanhToan + "') AND (NgayKetThuc = '" + ngayKetThuc.ToString("MM/dd/yyyy hh:mm:ss tt") + "')";
            //String strSQL = "Select * From HOADON where TenKhachThanhToan=" + tenKhachThanhToan + " and NgayKetThuc='" + ngayKetThuc.ToString("MM/dd/yyyy hh:mm:ss tt") + "'";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                hoadonDto.MaHoaDon = int.Parse(myReader[0].ToString());
                hoadonDto.TenKhachThanhToan = myReader[1].ToString();
                hoadonDto.DiaChi = myReader[2].ToString();
                hoadonDto.TriGia = int.Parse(myReader[3].ToString());
                hoadonDto.NgayKetThuc = DateTime.Parse(myReader[4].ToString());
                hoadonDto.TinhTrang = bool.Parse(myReader[5].ToString());
                hoadonDto.MaTiepTan = int.Parse(myReader[6].ToString());
            }
            myReader.Close();
            cn.Close();
            return hoadonDto;
        }
        public static DataTable TraCuuHoaDonTheoYeuCau(string tenKhachThanhToan,DateTime ngayLap, string tenTiepTan, string sapXep, string thuTu)
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            cn = CHOADONDAO.ConnectionData();
            string sql = "SELECT NGUOIDUNG.*,HOADON.* FROM(NGUOIDUNG INNER JOIN HOADON ON NGUOIDUNG.MaNguoiDung = HOADON.MaTiepTan) where  HOADON.TinhTrang=false and 1";
            if (tenKhachThanhToan != "")
            {
                sql += " and HOADON.TenKhachThanhToan like '%" + tenKhachThanhToan + "%'";
            }
            //sql += " and NgayBatDau= '" + ngayLap+"'";
            if (tenTiepTan != "")
            {
                sql += " and NGUOIDUNG.TenNguoiDung like '%" + tenTiepTan + "%'";
            }
            if (sapXep == "Tự động")
            {
                sql += " order by MaHoaDon";
            }
            if (sapXep == "Tên khách thanh toán")
            {
                sql += " order by HOADON.TenKhachThanhToan";
            }
            if (sapXep == "Ngày lập")
            {
                sql += " order by HOADON.NgayKetThuc";
            }
            if (sapXep == "Tiếp tân lập")
            {
                sql += " order by NGUOIDUNG.TenNguoiDung";
            }
            if (thuTu == "Tăng")
            {
                sql += " asc ";
            }
            if (thuTu == "Giảm")
            {
                sql += " desc ";
            }
            OleDbDataAdapter da = new OleDbDataAdapter(sql, cn);
            da.Fill(dt);
            cn.Close();
            return dt;
        }
    }
}
